if __name__ == "__main__":
    # 加载交易数据
    transactions = load_transactions()
    # 1. 挖掘频繁项集（最小支持度设为0.1，可根据数据调整）
    min_support = 0.1 if len(transactions) >= 100 else 0.2  # 数据量小时提高支持度
    print(f"\n开始挖掘频繁项集（最小支持度：{min_support}）")
    freq_sets = apriori(transactions, min_support=min_support)
    if not freq_sets:
        exit()  # 无频繁项集时退出
    # 2. 生成关联规则（最小置信度设为0.2）
    min_conf = 0.2
    print(f"\n开始生成关联规则（最小置信度：{min_conf}）")
    rules = generate_rules(freq_sets, transactions, min_conf=min_conf)
    # 3. 输出结果
    print("\n" + "=" * 50)
    print("1. 频繁项集（Top 10，按支持度降序）")
    print("=" * 50)
    count = 0
    for freq_group in freq_sets:
        # 按支持度降序排序当前组的频繁项集
        sorted_itemsets = sorted(freq_group.items(), key=lambda x: x[1], reverse=True)
        for itemset, support in sorted_itemsets:
            print(f"项集：{set(itemset)} | 支持度：{support:.2f}")
            count += 1
            if count >= 10:
                break
        if count >= 10:
            break
    print("\n" + "=" * 50)
    print("2. 关联规则（Top 10，按置信度降序）")
    print("=" * 50)
    if rules:
        for i, (antecedent, consequent, conf) in enumerate(rules, 1):
            print(f"规则{i}：{antecedent} → {consequent} | 置信度：{conf}")
    else:
        print(f"未找到满足最小置信度（{min_conf}）的关联规则，可降低min_conf重试")